perm filename NEW[CLS,LSP]2 blob sn#849843 filedate 1987-11-25 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	āˆ‚24-Nov-87  2121	Gregor.pa@Xerox.COM 	Review material    
C00018 ENDMK
CāŠ—;
āˆ‚24-Nov-87  2121	Gregor.pa@Xerox.COM 	Review material    
Received: from XEROX.COM by SAIL.STANFORD.EDU with TCP; 24 Nov 87  21:21:11 PST
Received: from Semillon.ms by ArpaGateway.ms ; 24 NOV 87 21:20:54 PST
Date: Tue, 24 Nov 87 21:20 PST
From: Gregor.pa@Xerox.COM
Subject: Review material
To: Dick Gabriel <RPG@SAIL.Stanford.EDU>
In-Reply-To: The message of 23 Nov 87 10:36 PST from Dick Gabriel
 <RPG@SAIL.Stanford.EDU>
Message-ID: <871124212003.0.GREGOR@SPIFF.parc.xerox.com>
Line-fold: no

    Date: 23 Nov 87 10:36 PST
    From: Dick Gabriel <RPG@SAIL.Stanford.EDU>

    I put together a first attempt of a description of meta-objects for
    chapter 1 along with a redo of the meta-objects section. I'm not
     entirely sure that the result is clear or accurate. It appears at the
    end of this message. Also, could you review the chapter 1 sections on
    change-class and class redefinition? I attempted a simplifying rewrite
    and found the original (written by Moon) to be ambiguous. Thanks.

			    -rpg-

    \beginSection{Meta-Objects}

    The implementation of the \OS\ manipulates metaclasses and invokes
    generic functions. The meta-object protocol specifies a set of generic
    functions defined by methods on objects; the behavior of those generic
    functions defines the behavior of the \OS. The generic functions and
    the objects on which their methods are specialized are called {\bit
    meta-objects}.  Programming at the meta-object protocol level involves
    defining new objects along with methods specialized on them for
    generic functions specified to be in the meta-object protocol.

Perhaps:

"The implementation of the \OS\ manipulates classes, methods and generic
functions.  The meta-object protocol specifies a set of generic
functions defined by methods on classes; the behavior of those generic
functions defines the behavior of the \OS.  The instances of the classes
on which those methods are defined are called meta-objects.  Programming
at the meta-object protocol level involves defining new classes of
metaobjects along with methods specialized on these classes for generic
functions specified to be in the meta-object protocol."

It still doesn't read comfortably, but it is more accurate.
Specifically:
  - classes methods and generic functions are the datastructure the
    implementation manipulates.  They are the metaobjects.

  - I prefer to use the terminology methods defined on classes not
    methods defined on objects.

  - a couple of other related nits in the 3rd and 4th sentences.

    \beginsubSection{Metaclasses}

    The {\bit metaclass\/} of an object is the class of its class.  The
    metaclass determines the representation of instances of its instances and
    the forms of inheritance used by its instances for slot descriptions and
    method inheritance.  The metaclass mechanism can be used to provide
    particular forms of optimization or to tailor the \CLOS\ for particular
    uses.  The protocol for defining metaclasses is discussed in the chapter,
    ``The \CLOS\ Meta-Object Protocol.''

    \endsubSection%{Metaclasses}

    \beginsubSection{Standard Metaclasses}

    The \CLOS\ provides a number of predefined metaclasses.  These include the
    following: {\bf standard-class}, {\bf built-in-class}, and {\bf
    structure-class}.

    \beginlist

    \item{\bull}
    The class {\bf standard-class} is the default class of classes defined
    by {\bf defclass}.

    \item{\bull} The class {\bf built-in-class} is the class whose
    instances are classes that have special implementations with
    restricted capabilities.  All classes that correspond to the standard
    Common Lisp types specified in {\it Common Lisp: The Language\/}
    are potentially instances of {\bf built-in-class}.
    The predefined Common Lisp type specifiers that are required to have
    corresponding classes are listed in Figure~1-1.  It is implementation
    dependent whether each of these classes is actually a built-in class.

    \item{\bull}
    All classes defined by means of {\bf defstruct} are instances of 
    {\bf structure-class}.
    \endlist

    \endsubSection%{Standard Metaclasses}

    \beginsubSection{Standard Meta-objects}

    The class {\bf standard-object} and instances of the classes {\bf
    standard-method} and {\bf standard-generic-function} are standard
    meta-objects.

Hmm, what is 'standard metaobject' supposed to convey here.  That it is
in the standard?  That it is of the standard kind?  This term seems too
confusing to me since it might be desirable to have it mean one or the
other.

    {\bf standard-object}.

    \beginlist

    \item{\bull}
    The class {\bf standard-method} is the default class of methods
    defined by {\bf defmethod}.

the method defining forms no?

    \item{\bull}
    The class {\bf standard-generic-function} is the default class of 
    generic functions defined by the method-defining forms {\bf defmethod},
    {\bf defgeneric}, {\bf generic-function}, {\bf generic-flet},
    {\bf generic-labels}, and {\bf with-added-methods}.

    \item{\bull} The class named {\bf standard-object} is an instance of
    the class {\bf standard-class} and is a superclass of every class that
    is an instance of {\bf standard-class} except itself.

    \endlist

    \endsubSection%{Standard Meta-objects} 

    \endSection%{Meta-Objects}


All in all this looks good except for the comments about the first
paragraph.  

I understand that it is real easy to get confused about this stuff.  To
help you get confused, here is a twister that got me for a long time:
(But warning, do not think about it when driving or mowing the lawn or
anything like that).

The objects which the CLOS system itself manipulates are classes,
methods and generic functions.  We call these metaobjects because they
are the objects the metacircular "evaluator" uses to run the language.
The CLOS system is defined by generic functions which are defined by
methods defined on the classes of the metaobjects.

What are the generic functions and methods which make up the definition
of the system themselves?


meta-meta-objects I guess.

Note that I put evaluator in quotes.  That's because in some sense
evaluator isn't such a good word.  Because the damn thing runs compiled
code and has all sorts of mechanisms for controlling compilation and
optimization.  We are now using the word CLOS kernel to talk about the
thing that we have previously called the metacircular evaluator.  I
guess the generic term for it would be 'metacircular kernel'.  We think
the term kernel captures the fact that it comprises and evaluator,
compiler support and run-time support.

Sorry it took so long to get back about this.

The mop spec is looking better.  I plan to work all weekend and let you
all see whatever we have on Monday, whether I am real happy with it or
not.
-------